#include "lrcpage.h"
#include "ui_lrcpage.h"

LrcPage::LrcPage(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::LrcPage)
{
    ui->setupUi(this);
    lrcAnimation = new QPropertyAnimation(this, "geometry", this);
    lrcAnimation->setDuration(250);
    lrcAnimation->setStartValue(QRect(10, 10, width(), height()));
    lrcAnimation->setEndValue(QRect(10, 10+height(), width(), height()));
    setWindowFlag(Qt::FramelessWindowHint);

    connect(ui->hideBtn, &QPushButton::clicked, this, [=]{
        hide();
    });
    connect(lrcAnimation, &QPropertyAnimation::finished, this, [=]{
    hide();
    });
    ui->hideBtn->setIcon(QIcon(":/image/xiala.png"));
}

LrcPage::~LrcPage()
{
    delete ui;
}

bool LrcPage::parseLrc(const QString &lrcPath)
{
    lrcLines.clear();
    // 打开歌词⽂件
    QFile lrcFile(lrcPath);
    if(!lrcFile.open(QFile::ReadOnly))
    {
    qDebug()<<"打开⽂件:"<<lrcPath;
    return false;
    }
    while(!lrcFile.atEnd())
    {
    QString lrcWord = lrcFile.readLine(1024);
    // [00:17.94]那些失眠的⼈啊 你们还好吗
    // [0:58.600.00]你像⼀只⻜来⻜去的蝴蝶
    int left = lrcWord.indexOf('[');
    int right = lrcWord.indexOf(']');
    // 解析时间
    qint64 lineTime = 0;
    int start = 0;
    int end = 0;
    QString time = lrcWord.mid(left, right-left+1);
    // 解析分钟
    start = 1;
    end = time.indexOf(':');
    lineTime += lrcWord.mid(start, end-start).toInt()*60*1000;
    // 解析秒
    start = end + 1;
    end = time.indexOf('.', start);
    lineTime += lrcWord.mid(start, end-start).toInt()*1000;
    // 解析毫秒
    start = end+1;
    end = time.indexOf('.', start);
    lineTime += lrcWord.mid(start, end-start).toInt();
    // 解析歌词
    QString word = lrcWord.mid(right+1).trimmed();
    lrcLines.push_back(LyricLine(lineTime, word.trimmed()));
   }
    //测试
    for(auto word : lrcLines)
    {
    qDebug()<<word.time<<" "<<word.text;
    }
    return true;
}

int LrcPage::getLineLrcWordIndex(qint64 pos)
{
    // 如果歌词是空的，返回-1
    if(lrcLines.isEmpty())
    {
    return -1;
    }
    if(lrcLines[0].time > pos)
    {
    return 0;
    }
    // 通过时间⽐较，获取下标
    for(int i = 1; i < lrcLines.size(); ++i)
    {
    if(pos > lrcLines[i-1].time && pos <= lrcLines[i].time)
    {
    return i-1;
    }
    }
    // 如果没有找到，返回最后⼀⾏
    return lrcLines.size()-1;
}

QString LrcPage::getLineLrcWord(qint64 index)
{
    if(index < 0 || index >= lrcLines.size())
    {
    return "";
    }
    return lrcLines[index].text;
}

void LrcPage::showLrcWord(int time)
{
    // 先要获取歌词--根据歌词的时间进⾏获取
    int index = getLineLrcWordIndex(time);
    if(-1 == index)
    {
    ui->line1->setText("");
    ui->line2->setText("");
    ui->line3->setText("");
    ui->lineCenter->setText("当前歌曲⽆歌词");
    ui->line4->setText("");
    ui->line5->setText("");
    ui->line6->setText("");
    }else
    {
    ui->line1->setText(getLineLrcWord(index-3));
    ui->line2->setText(getLineLrcWord(index-2));
    ui->line3->setText(getLineLrcWord(index-1));
    ui->lineCenter->setText(getLineLrcWord(index));
    ui->line4->setText(getLineLrcWord(index+1));
    ui->line5->setText(getLineLrcWord(index+2));
    ui->line6->setText(getLineLrcWord(index+3));
    }
}

